package com.tanguy.user.net.http

import cn.sinata.xldutils_kotlin.data.ResultData
import com.google.gson.JsonObject
import com.tanguy.user.Const
import com.tanguy.user.bean.*
import com.tanguy.user.bean.orde.TripOrder
import com.tanguy.user.bean.station.*
import io.reactivex.Observable
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query

/**
 *
 */
interface ApiService {

    //高德webApi
    @GET("config/district")
    fun getDistrict(@Query("key") key: String = Const.KEY.GAODE_WEB_KEY, @Query("subdistrict") subdistrict: Int = 3, @Query("extensions") extensions: String = "base"): Observable<JsonObject>

    @GET("assistant/inputtips")
    fun inputtips(@Query("keywords") keywords: String, @Query("city") city: String, @Query("key") key: String = Const.KEY.GAODE_WEB_KEY): Observable<JsonObject>


    //获取省份
    @POST("app/league/getprovinceList")
    fun getProvinceList(): Observable<ResultData<ArrayList<ProvinceBean>>>

    //获取城市
    @POST("app/league/getCityList")
    fun getCityList(@Query("code") code: String): Observable<ResultData<ArrayList<CityBean>>>

    //获取车辆品牌
    @POST("app/league/getBrandList")
    fun getBrandList(): Observable<ResultData<ArrayList<CarBrandBean>>>

    //获得车辆类型
    @POST("app/league/getModelList")
    fun getModelList(@Query("brandId") brandId: String): Observable<ResultData<ArrayList<CarModelBean>>>

    //获取酒店类型
    @POST("app/league/hotelType")
    fun getHotelType(): Observable<ResultData<HotelTypeBean>>

    //获取验证码
    @POST("app/smsrecord/getSms")
    fun sendSmsCode(@Query("phone") phone: String, @Query("type") type: Int): Observable<ResultData<Any>>

    //验证码登录
    @POST("app/userlogin/smsLogin")
    fun loginBySms(@Query("phone") phone: String, @Query("code") code: String): Observable<ResultData<User>>

    //验证验证码
    @POST("app/smsrecord/yzCode")
    fun yzCode(@Query("phone") phone: String, @Query("type") type: Int, @Query("code") code: String): Observable<ResultData<Any>>

    //密码登录
    @POST("app/userlogin/paswLogin")
    fun paswLogin(@Query("phone") phone: String, @Query("password") password: String): Observable<ResultData<User>>

    //设置和修改密码
    @POST("app/userlogin/settingPas")
    fun settingPas(@Query("id") id: Int, @Query("phone") phone: String, @Query("newpas") newpas: String, @Query("qrpas") qrpas: String): Observable<ResultData<Any>>

    //修改绑定手机
    @POST("app/more/replace")
    fun replacePhone(@Query("id") userId: Int, @Query("oldPhone") oldPhone: String, @Query("newPhone") newPhone: String): Observable<ResultData<Any>>

    //修改个人信息
    @POST("app/userinfo/updateInfo")
    fun updateInfo(@Query("id") id: Int, @Query("headImg") headImg: String?, @Query("name") name: String?, @Query("autograph") autograph: String?, @Query("sex") sex: Int?): Observable<ResultData<Any>>

    //我的钱包
    @POST("app/recharge/getMyMoney")
    fun getMyMoney(@Query("id") id: Int, @Query("money") money: Double): Observable<ResultData<JsonObject>>

    //获取充值记录
    @POST("app/recharge/getRecharecord")
    fun getRechareCord(@Query("id") id: Int, @Query("page") page: Int, @Query("rows") rows: Int): Observable<ResultData<ArrayList<RechargeRecord>>>

    //我的优惠券列表
    @POST("app/coupons/getCouponsList")
    fun getCouponsList(@Query("id") id: Int, @Query("state") state: Int, @Query("page") page: Int, @Query("rows") rows: Int): Observable<ResultData<ArrayList<CouponsBean>>>

    //获取司机评价
    @POST("app/evaluate/getDriverEvaList")
    fun getDriverEvaList(@Query("id") id: Int, @Query("page") page: Int, @Query("rows") rows: Int, @Query("type") type: Int = 1): Observable<ResultData<ArrayList<EvaluateDriver>>>

    //获取酒店评价
    @POST("app/evaluate/getDriverEvaList")
    fun getHotelEvaList(@Query("id") id: Int, @Query("page") page: Int, @Query("rows") rows: Int, @Query("type") type: Int = 2): Observable<ResultData<ArrayList<EvaluateHotel>>>

    //意见反馈
    @POST("app/more/FeedBack")
    fun feedBack(@Query("id") id: Int, @Query("content") content: String, @Query("role") role: String = "1"): Observable<ResultData<Any>>

    //司机加盟
    @POST("app/league/driverLeague")
    fun driverLeague(@Query("name") name: String
                     , @Query("sex") sex: Int
                     , @Query("idcard") idcard: String
                     , @Query("drivage") drivage: String
                     , @Query("licence") licence: String
                     , @Query("modelId") modelId: String
                     , @Query("color") color: String
                     , @Query("plate") plate: String
                     , @Query("careful") careful: String
                     , @Query("travel") travel: String
                     , @Query("insurance") insurance: String
                     , @Query("peoplecar") peoplecar: String
                     , @Query("id") id: Int
    ): Observable<ResultData<Any>>

    //司机加盟
    @POST("app/league/hotelLeague")
    fun hotelLeague(@Query("name") name: String
                    , @Query("cityCode") cityCode: String
                    , @Query("featureid") featureid: String
                    , @Query("typeid") typeid: String
                    , @Query("hotelAddr") hotelAddr: String
                    , @Query("lon") lon: String
                    , @Query("lat") lat: String
                    , @Query("people") people: String
                    , @Query("phone") phone: String
                    , @Query("showimg") showimg: String
                    , @Query("businImg") businImg: String
                    , @Query("specialImg") specialImg: String
                    , @Query("healthImg") healthImg: String
                    , @Query("fireImg") fireImg: String
    ): Observable<ResultData<Any>>

    /**
     * 出行首页
     */
    @POST("app/homepage/getTravelPage")
    fun getTravelPage(@Query("page") page: Int, @Query("rows") rows: Int, @Query("id") id: Int): Observable<ResultData<HomeBean>>

    /**
     * 推荐有礼
     */
    @POST("app/recommend/getRecommend")
    fun getRecommend(@Query("id") id: Int): Observable<ResultData<RecommendBean>>


    /**
     * 推荐有礼
     */
    @POST("app/userlogin/getUserinfo")
    fun getUserinfo(@Query("id") id: Int): Observable<ResultData<User>>

    /**
     * 输入出发地(获取这个城市开通的站点)
     */
    @POST("app/dock/origin")
    fun origin(@Query("code") code: String): Observable<ResultData<StationBean>>

    /**
     *接机/送机/接站/送站
     */
    @POST("app/homepage/docking")
    fun docking(@Query("type") type: Int, @Query("code") code: String): Observable<ResultData<DockingBean>>


    /**
     *出发地-->更换城市
     */
    @POST("app/dock/getSiteList")
    fun getSiteList(@Query("cityId") cityId: String): Observable<ResultData<UpCityBean>>


    /**
     *输入目的地 将所有开通的城市返回 用于你们选择城市定位
     */
    @POST("app/dock/destination")
    fun destination(): Observable<ResultData<ListBean>>

    /**
     * 接站计算价格
     */
    @POST("app/dock/calculate")
    fun calculate(@Query("gradeId") gradeId: String
                  , @Query("siteId") siteId: String
                  , @Query("boulat") boulat: String
                  , @Query("boulon") boulon: String
                  , @Query("userId") userId: String
    ): Observable<ResultData<JsonObject>>

    /**
     * 	String	是	站点ID
    String	是	用户ID
    String	是	目的地纬度
    String	是	目的地经度
    String	是	目的地
    String	是	车辆级别ID
    String	是	乘车时间（2017-12-02 11:10:10）
    String	是	是否替他人叫车 1=是 2=否
    String	是	他人名称
    String	是	他人电话
    String	是	总金额(没去除抵扣券金额)
    String	是	抵扣券ID
    String	是	抵扣券金额
     */
    @POST("app/travlorder/dockOrder")
    fun dockOrder(@Query("siteId") siteId: String
                  , @Query("userId") userId: String
                  , @Query("boulat") boulat: String
                  , @Query("boulon") boulon: String
                  , @Query("bourn") bourn: String
                  , @Query("gradeId") gradeId: String
                  , @Query("bybustime") bybustime: String
                  , @Query("ista") ista: String
                  , @Query("taname") taname: String
                  , @Query("taphone") taphone: String
                  , @Query("totalmoney") totalmoney: String
                  , @Query("coupId") coupId: String
                  , @Query("offstmoney") offstmoney: String
    ): Observable<ResultData<JsonObject>>

    /**
     * 送站发送订单
     */
    @POST("app/travlorder/galconOrder")
    fun galconOrder(@Query("siteId") siteId: String
                    , @Query("userId") userId: String
                    , @Query("depLat") boulat: String
                    , @Query("depLon") boulon: String
                    , @Query("departure") bourn: String
                    , @Query("gradeId") gradeId: String
                    , @Query("bybustime") bybustime: String
                    , @Query("ista") ista: String
                    , @Query("taname") taname: String
                    , @Query("taphone") taphone: String
                    , @Query("totalmoney") totalmoney: String
                    , @Query("coupId") coupId: String
                    , @Query("offstmoney") offstmoney: String
                    , @Query("code") code: String
    ): Observable<ResultData<JsonObject>>

    /**
     * 余额支付
     */
    @POST("app/payinfo/balancePay")
    fun balancePay(@Query("orderId") orderId: String): Observable<ResultData<JsonObject>>

    /**
     * 支付宝微信支付
     */
    @POST("app/payinfo/payinfo")
    fun payinfo(@Query("type") type: String, @Query("orderId") orderId: String): Observable<ResultData<JsonObject>>

    /**
     * 地图获得车型
     */
    @POST("app/galcon/mapGetCar")
    fun mapGetCar(@Query("code") code: String): Observable<ResultData<DockingBean>>

    /**
     * 尝试取消订单
     */
    @POST("app/userorder/trvalcenlOrder")
    fun trvalcenlOrder(@Query("orderId") orderId: String): Observable<ResultData<JsonObject>>

    /**
     * 尝试取消订单
     */
    @POST("app/userorder/trvalcenltow")
    fun trvalcenltow(@Query("orderId") orderId: String, @Query("kou") kou: String, @Query("cenlyy") cenlyy: String, @Query("cenlms") cenlms: String): Observable<ResultData<Any>>

    /**
     * 获取订单详情
     */
    @POST("app/userorder/getTravlOrderInfo")
    fun getTravlOrderInfo(@Query("orderId") orderId: String, @Query("type") type: Int): Observable<ResultData<TripOrder>>


}